package com.eu.ebpm.engine.service;

import java.util.Map;

import com.eu.ebpm.engine.entity.args.BusinessParam;
import com.eu.ebpm.engine.entity.args.StartupParam;
import com.eu.ebpm.engine.entity.runtime.Execution;


/**
 * 
 * 类名称: RuntimeService
 * 类描述: 流程运行时服务
 * @author 王晓华
 * @since 2015-1-22 下午07:40:31
 * @version v1.0
 */
public interface ExecutionService {

	/**
	 * 根据流程定义key启动流程
	 * 处理逻辑：
	 * 		1、判断流程是否激活
	 * 		2、判断是否具有启动流程的权限
	 * 		3、插入运行时流程
	 * 		4、插入运行时参数
	 * 		5、执行流程调度服务
	 * @param key 流程标志
	 * @param variables 流程参数
	 * @return 运行流程信息
	 */
	public Execution startProcessInstanceByKey(String key);
	public Execution startProcessInstanceByKey(String key, StartupParam permitArg);
	public Execution startProcessInstanceByKey(String key, BusinessParam businessArg);
	public Execution startProcessInstanceByKey(String key, BusinessParam businessArg, StartupParam permitArg);
	
	/**
	 * 设置流程的业务参数
	 * @param executionId 流程ID
	 * @param variableName 参数名称
	 * @param value 参数值
	 */
	public void setVariable(long executionId, String variableName, Object value);
	
	/**
	 * 查询流程的业务参数
	 * @param executionId 流程ID
	 * @param variableName 参数名称
	 * @return 参数值
	 */
	public <T> T getVariable(long executionId, String variableName);
	
	/**
	 * 查询流程的业务参数
	 * @param executionId 流程ID
	 * @return 参数值集合
	 */
	public Map<String, Object> getVariables(long executionId);
	
	/**
	 * 删除业务参数
	 * @param executionId 流程ID
	 * @param variableName 参数名称
	 */
	public void removeVariable(long executionId, String variableName);
	
	/**
	 * 删除流程
	 * @param executionId 流程ID
	 */
	public void removeProcessByExeId(int executionId);
	
}
